//AC
#include <bits/stdc++.h>
using namespace std;

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    
    int n;
    long long m;
    cin >> n >> m;
    
    vector<int> a(n);
    for (int &v : a) 
        cin >> v;
    
    // 按位数分组存储模m的结果
    vector<vector<long long>> g(11);
    for (int v : a) {
        int digits = to_string(v).size();
        g[digits].push_back(v % m);
    }
    
    // 对每组进行排序，便于二分查找
    for (auto &gg : g) 
        sort(gg.begin(), gg.end());
    
    long long ans = 0;
    
    // 对于每个A_i
    for (long long ai : a) {
        long long current = ai % m;
        
        // 遍历所有可能的位数k（1到10）
        for (int k = 1; k < 11; k++) {
            // 动态计算 A_i * 10^k % m
            current = (current * 10) % m;
            
            // 需要的余数：(-A_i * 10^k) % m
            const long long key = (m - current) % m;
            
            // 使用二分查找统计满足条件的A_j数量
            auto lower = lower_bound(g[k].begin(), g[k].end(), key);
            auto upper = lower_bound(g[k].begin(), g[k].end(), key + 1);
            ans += (upper - lower);
        }
    }
    
    cout << ans << endl;
    return 0;
}